﻿using Microsoft.AspNetCore.Builder;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ChenShiBao.EventBus
{
    /// <summary>
    /// 此代码的主要目的是在 ASP.NET Core 应用程序的中间件配置阶段确保事件总线（IEventBus）的可用性。通过这个扩展方法，开发者可以方便地在应用程序中使用事件总线，确保在处理请求时能够正确地使用消息和事件处理机制。如果事件总线没有被正确配置，应用将会抛出异常。
    /// </summary>
    public static class ApplicationBuilderExtensions
    {
        public static IApplicationBuilder UseEventBus(this IApplicationBuilder appBuilder)
        {
            //获得IEventBus一次，就会立即加载IEventBus，这样扫描所有的EventHandler，保证消息及时消费
            object? eventBus = appBuilder.ApplicationServices.GetService(typeof(IEventBus));
            if (eventBus == null)
            {
                throw new ApplicationException("找不到IEventBus实例");
            }
            return appBuilder;
        }
    }
}
